iT邦幫忙

2024 iThome 鐵人賽

DAY 21
1

自己從0開始建資料庫的機會不多,所以突然又重新思考了一下有沒有必要拆成5個表格,之後也去問了Claude AI。

跟他說明了我的資料層級跟主鍵、外鍵設計,而在使用上使用者、平面圖跟房間通常更動次數較低,家具跟收納物會頻繁的更動。

層級與關係:使用者>平面圖>房間>家具>收納物

Claude AI是給我正向的回饋,代表我一開始的想法沒錯,靈活又高效就是我心中理想的DB設計٩(๑•̀ω•́๑)۶

  • 清晰的數據結構:每個實體都有其獨立的集合,使得數據模型非常清晰。
  • 高度的靈活性:可以獨立地管理和更新每個實體。
  • 精細的訪問控制:如果需要,可以對不同的集合設置不同的訪問權限。
  • 高效的更新:當只需要更新特定類型的實體時,不會影響其他相關實體。
  • 查詢效率:通過使用主鍵和外鍵,你可以有效地關聯數據,而不需要多次查詢。

考慮到你提到的使用模式(平面圖和房間不常更動,家具和物品經常變動),這種分離的結構實際上是很合適的:

  • 它允許你獨立地、高效地更新經常變動的家具和物品,而不會影響較穩定的平面圖和房間數據。
  • 通過使用主鍵和外鍵,你可以在需要時輕鬆地關聯這些實體,而不會犧牲查詢效率。

所以我繼續完成 API 開發,目前是先把模型建起來,還有所有的getList寫好,getList的部份昨天截過圖了,今天展示模型就好,也因為最近剛上完資安的課,對於欄位跟IP、Port號外露特別敏感,所以只能打碼給大家看了。

Model.ts

import mongoose, { Document, Schema } from 'mongoose';

// 定義 FloorPlan 的接口
interface IFloorPlan extends Document {
  ****Id: string;
  ****Name: string;
  ....
}

// 定義 FloorPlan 的 schema
const floorPlanSchema: Schema<IFloorPlan> = new Schema({
  ****Id: {
    type: ****,
    required: true,
  },
  ****Name: {
    type: ****,
    required: true,
  },
  ....
});

// 定義 FloorPlan 模型,並指定集合名稱為 '****'
const FloorPlan = mongoose.model<IFloorPlan>('FloorPlan', floorPlanSchema, '****');

export default FloorPlan;

上一篇
Day20:連接DB
下一篇
Day22:定義回傳型別
系列文
收納規劃APP32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言